/**
 * 模板方法模式：
 *      定义一个操作中的算法的骨架，而将一些步骤延迟到子类中。
 *      模板方式使得子类可以不改变一个算法的结构就可以重定义该算法的某些特定步骤。
 * 角色：
 *      抽象类：
 *          @see BehavioralModel.TemplateMethodModel.AbstractPerson
 *      具体类：
 *          @see BehavioralModel.TemplateMethodModel.Student
 * 优点：
 *      （1）模板方法模式通过将不变的行为迁移到父类中，去除了子类的重复代码
 *      （2）子类实现算法的某些细节，有助于扩展
 *      （3）通过一个父类调用子类的实现的操作，通过子类扩展增加了新的行为，符合开发-封闭原则
 *
 * 缺点： 每一个不同的实现，都需要定义一个子类，会导致子类的数量的增加
 *
 * 使用场景：在某些类的算法中，用了相同的方法，使得代码的重复。控制子类扩展，子类必须遵守算法规则
 *
 * 模板方法与建造者模式的区别：
 *      （1）模板方法是行为模式，而建造者模式是创建型模式
 *      （2）行为模式设计到算法和对象间的职责分配，不仅描述对象或类的模式，还描述他们之间的通信方式。
 *           刻画了运行时难以跟踪的复杂的控制流
 *           创建型模式抽象了实例化过程，他们帮助一个系统独立于如何创建，组合和表示他的那些对象。
 *           一个类创建型模式使用继承改变被实例化的类，而创建型模式将实例化委托给另一个对象
 *      （3）模板方法模式是用来控件对象和类的通信，建造者模式是用来创建对象的
 *
 * @author 王蕾 [wanglei_dev@cyou-inc.com]
 * @date 2017-12-07 16:17:00
 */
package BehavioralModel.TemplateMethodModel;